02. 从头创建仓库

在对 Git 仓库进行 commit 或执行任何其他操作之前,需要一个实际存在的仓库。要使用 Git 新建一个仓库,我们将使用 git init 命令。

init 子命令是"initialize"(初始化)的简称,这个命令很有用,因为它将进行所有仓库初始设置。稍后我们将了解它的作用。

所需的命令

注意!我们将在这节课使用以下终端命令:

  • ls - 用来列出文件和目录
  • mkdir - 用来新建目录
  • cd - 用来更改目录
  • rm - 用来删除文件和目录

如果你不知道如何使用它们,请参阅我们的 Linux 命令行基础 课程!

我们还会涉及的一个概念是当前目录,即你的 shell 正在查看的目录。使用 cd 可以更改工作目录,使用 ls (单独使用)会列出工作目录下的文件。如果你忘记 shell 的当前工作目录,可以使用 pwd 命令(表示 print working directory 输出工作目录)输出该目录的名称。

创建课程目录

我们将为本课程新建一个项目。因为我们都是专业人士,因此我们希望我们的项目具有条理性。如果你已经在计算机上有一个放置所有项目的文件夹,则可以继续这么做。我会将所有的工作文件存储在目录 udacity-git-course 下。

如果你想跟着我一起操作:

  • 创建一个目录,叫做 udacity-git-course

  • 在该目录中,创建另一个目录,叫做 new-git-project

  • 使用 cd 命令移到 new-git-project 目录下

如果你和我一样喜欢复制粘贴,则在终端上运行以下命令:- mkdir -p udacity-git-course/new-git-project && cd $_ (在运行此命令前,确保使用 cd 命令转到你想将这些文件存储到的位置。例如,如果你想将文件存储到桌面上,则使用 cd 转到桌面,然后再运行该命令。)

一切准备好后,你的终端应该位于 new-git-project 目录中,并看起来如下所示:

_位于 new-git-project 目录下的终端应用。_

位于 new-git-project 目录下的终端应用。

git init

很棒!我们已经准备好,并且可以开始使用 git init 命令了!

这是最简单的命令之一。你只需在终端上运行 git init 。就这么多内容,立即试试吧!

_终端显示 `git init` 命令正在运行。该命令会在当前目录下初始化生成一个空的 Git 仓库。_

终端显示 git init 命令正在运行。该命令会在当前目录下初始化生成一个空的 Git 仓库。

提示符更改?

运行 git init 了吗?如果没有,现在就运行吧,因为这道练习会用到该命令!

运行 git init 之后,应该会出现一段文字:"Initialized empty Git repository in",后面是一个路径。问题是,提示符有任何改变吗?如果有改变,是什么?

SOLUTION: 是的,我看到单词 master 了。

## git init 命令的作用

运行 git init 命令会初始化 Git 跟踪所有内容会用到的所有必要文件和目录。所有这些文件都存储在叫做 .git (注意开头有个 . ,表示在 Mac/Linux 上,它将是一个隐藏目录)的目录下。这个 .git 目录是一个库!Git 会将所有 commit 记录在这里,并跟踪所有内容!

我们来大致了解下 .git 目录下的内容。

警告:请勿直接修改 .git 目录下的任何文件。这是仓库的核心。如果你更改了文件名或文件内容,Git 可能就无法跟踪你保存在仓库中的文件,你可能会丢失很多内容!可以查看这些文件,但是请勿编辑或删除这些文件。

_Mac 的 Finder 窗口正在显示“.git”隐藏目录中的内容。_

Mac 的 Finder 窗口正在显示“.git”隐藏目录中的内容。

.git 目录内容

我们将查看 .git 目录…对这门课程来说,该目录并不重要,因此不用记住任何内容,你可以在此处深入了解 Git 背后的工作原理。

下面简要概述了 .git 目录下的各项内容:

  • config 文件 - 存储了所有与项目有关的配置设置。

摘自于 Git Book - 英 | 中文点此处

Git 会查看 Git 目录下你当前所使用仓库对应的配置文件(.git/config)中的配置值。这些值仅适用于当前仓库。

例如,假设你将 Git 全局配置为使用你的个人电子邮箱。如果你想针对某个项目使用你的工作邮箱,则此项更改会被添加到该文件中。

  • description 文件 - 此文件仅用于 GitWeb 程序,因此可以忽略

  • hooks 目录 - 我们会在此处放置客户端或服务器端脚本,以便用来连接到 Git 的不同生命周期事件

  • info 目录 - 包含全局排除文件

    • objects 目录 - 此目录将存储我们提交的所有 commit

    • refs 目录 - 此目录存储了指向 commit 的指针(通常是“分支”和“标签”)

注意,除了 hooks 目录,你应该不会对这里的其他内容有太多的困扰。hooks 目录可以用来连接到 Git 工作流的不同部分或事件,但是在这门课程中,我们不会对此作过多介绍。

深入研究

git init 小结

使用 git init 命令可以在当前目录下创建新的空仓库。

$ git init

运行此命令可以创建隐藏 .git 目录。此 .git 目录是仓库的核心/存储中心。它存储了所有的配置文件和目录,以及所有的 commit。

实用链接